home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD173503202001.psc / Map Editor / General.bas < prev    next >
Encoding:
BASIC Source File  |  2000-09-09  |  12.0 KB  |  381 lines

  1. Attribute VB_Name = "General"
  2. Option Explicit
  3.  
  4. 'For Get and Write Var
  5. Declare Function writeprivateprofilestring Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationname As String, ByVal lpKeyname As Any, ByVal lpString As String, ByVal lpfilename As String) As Long
  6. Declare Function getprivateprofilestring Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationname As String, ByVal lpKeyname As Any, ByVal lpdefault As String, ByVal lpreturnedstring As String, ByVal nsize As Long, ByVal lpfilename As String) As Long
  7.  
  8. 'For KeyInput
  9. Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
  10.  
  11. Sub RefreshMapList()
  12. '*****************************************************************
  13. 'Updates the maps list in the map list
  14. '*****************************************************************
  15. Dim LoopC As Integer
  16. Dim ActualNumMaps As Integer
  17.  
  18. frmMain.MapLst.Clear
  19.  
  20. 'Add maps to the map list
  21. For LoopC = 1 To NumMaps
  22.     If FileExist(App.Path & MapPath & "Map" & LoopC & ".dat", vbNormal) = True Then
  23.         frmMain.MapLst.AddItem "Map " & LoopC
  24.         frmMain.MapLst.ItemData(frmMain.MapLst.ListCount - 1) = LoopC
  25.         ActualNumMaps = LoopC
  26.     End If
  27. Next LoopC
  28.  
  29. NumMaps = ActualNumMaps
  30.  
  31. End Sub
  32.  
  33.  
  34. Sub SwitchMap(Map As Integer)
  35. '*****************************************************************
  36. 'Loads and switches to a new room
  37. '*****************************************************************
  38. Dim LoopC As Integer
  39. Dim TempInt As Integer
  40. Dim Body As Integer
  41. Dim Head As Integer
  42. Dim Heading As Byte
  43. Dim Y As Integer
  44. Dim X As Integer
  45.    
  46. 'Change mouse icon
  47. frmMain.MousePointer = 11
  48.    
  49. 'Open files
  50. Open App.Path & MapPath & "Map" & Map & ".map" For Binary As #1
  51. Seek #1, 1
  52.         
  53. Open App.Path & MapPath & "Map" & Map & ".inf" For Binary As #2
  54. Seek #2, 1
  55.  
  56. 'map Header
  57. Get #1, , MapInfo.MapVersion
  58. Get #1, , TempInt
  59. Get #1, , TempInt
  60. Get #1, , TempInt
  61. Get #1, , TempInt
  62.  
  63. 'inf Header
  64. Get #2, , TempInt
  65. Get #2, , TempInt
  66. Get #2, , TempInt
  67. Get #2, , TempInt
  68. Get #2, , TempInt
  69.  
  70. 'Load arrays
  71. For Y = YMinMapSize To YMaxMapSize
  72.     For X = XMinMapSize To XMaxMapSize
  73.  
  74.         '.map file
  75.         Get #1, , MapData(X, Y).Blocked
  76.         For LoopC = 1 To 4
  77.             Get #1, , MapData(X, Y).Graphic(LoopC).GrhIndex
  78.             
  79.             'Set up GRH
  80.             If MapData(X, Y).Graphic(LoopC).GrhIndex > 0 Then
  81.  
  82.                 InitGrh MapData(X, Y).Graphic(LoopC), MapData(X, Y).Graphic(LoopC).GrhIndex
  83.  
  84.             End If
  85.         
  86.         Next LoopC
  87.         'Empty place holders for future expansion
  88.         Get #1, , TempInt
  89.         Get #1, , TempInt
  90.                                     
  91.                                     
  92.         '.inf file
  93.         
  94.         'Tile exit
  95.         Get #2, , MapData(X, Y).TileExit.Map
  96.         Get #2, , MapData(X, Y).TileExit.X
  97.         Get #2, , MapData(X, Y).TileExit.Y
  98.                       
  99.         'make NPC
  100.         Get #2, , MapData(X, Y).NPCIndex
  101.         If MapData(X, Y).NPCIndex > 0 Then
  102.             Body = Val(GetVar(IniPath & "NPC.dat", "NPC" & MapData(X, Y).NPCIndex, "Body"))
  103.             Head = Val(GetVar(IniPath & "NPC.dat", "NPC" & MapData(X, Y).NPCIndex, "Head"))
  104.             Heading = Val(GetVar(IniPath & "NPC.dat", "NPC" & MapData(X, Y).NPCIndex, "Heading"))
  105.             Call MakeChar(NextOpenChar(), Body, Head, Heading, X, Y)
  106.         End If
  107.         
  108.         'Make obj
  109.         Get #2, , MapData(X, Y).OBJInfo.OBJIndex
  110.         Get #2, , MapData(X, Y).OBJInfo.Amount
  111.         If MapData(X, Y).OBJInfo.OBJIndex > 0 Then
  112.             InitGrh MapData(X, Y).ObjGrh, Val(GetVar(IniPath & "OBJ.dat", "OBJ" & MapData(X, Y).OBJInfo.OBJIndex, "GrhIndex"))
  113.         End If
  114.         
  115.         'Empty place holders for future expansion
  116.         Get #2, , TempInt
  117.         Get #2, , TempInt
  118.              
  119.     Next X
  120. Next Y
  121.  
  122. 'Close files
  123. Close #1
  124. Close #2
  125.  
  126. 'Other Room Data
  127. MapInfo.Name = GetVar(App.Path & MapPath & "Map" & Map & ".dat", "Map" & Map, "Name")
  128. frmMain.MapNameTxt = MapInfo.Name
  129.  
  130. MapInfo.Music = GetVar(App.Path & MapPath & "Map" & Map & ".dat", "Map" & Map, "MusicNum")
  131. frmMain.MusNumTxt = MapInfo.Music
  132.  
  133. MapInfo.StartPos.Map = Val(ReadField(1, GetVar(App.Path & MapPath & "Map" & Map & ".dat", "Map" & Map, "StartPos"), 45))
  134. MapInfo.StartPos.X = Val(ReadField(2, GetVar(App.Path & MapPath & "Map" & Map & ".dat", "Map" & Map, "StartPos"), 45))
  135. MapInfo.StartPos.Y = Val(ReadField(3, GetVar(App.Path & MapPath & "Map" & Map & ".dat", "Map" & Map, "StartPos"), 45))
  136. frmMain.StartPosTxt = MapInfo.StartPos.Map & "-" & MapInfo.StartPos.X & "-" & MapInfo.StartPos.Y
  137.  
  138. frmMain.MapVersionTxt = MapInfo.MapVersion
  139.  
  140. CurMap = Map
  141. frmMain.MapNameTxt.Text = "Map " & CurMap
  142.  
  143. 'Set changed flag
  144. MapInfo.Changed = 0
  145.  
  146. 'Change mouse icon
  147. frmMain.MousePointer = 0
  148.  
  149. End Sub
  150. Sub CheckKeys()
  151. '*****************************************************************
  152. 'Checks keys
  153. '*****************************************************************
  154.  
  155. 'Check arrow keys
  156. If UserMoving = 0 Then
  157.  
  158.     If GetKeyState(vbKeyUp) < 0 Then
  159.         If WalkMode = True Then
  160.             If LegalPos(UserPos.X, UserPos.Y - 1) Then
  161.                 MoveCharbyHead UserCharIndex, NORTH
  162.                 MoveScreen NORTH
  163.             End If
  164.         Else
  165.             MoveScreen NORTH
  166.         End If
  167.         Exit Sub
  168.     End If
  169.  
  170.     If GetKeyState(vbKeyRight) < 0 Then
  171.         If WalkMode = True Then
  172.             If LegalPos(UserPos.X + 1, UserPos.Y) Then
  173.                 MoveCharbyHead UserCharIndex, EAST
  174.                 MoveScreen EAST
  175.             End If
  176.         Else
  177.             MoveScreen EAST
  178.         End If
  179.         Exit Sub
  180.     End If
  181.  
  182.     If GetKeyState(vbKeyDown) < 0 Then
  183.         If WalkMode = True Then
  184.             If LegalPos(UserPos.X, UserPos.Y + 1) Then
  185.                 MoveCharbyHead UserCharIndex, SOUTH
  186.                 MoveScreen SOUTH
  187.             End If
  188.         Else
  189.             MoveScreen SOUTH
  190.         End If
  191.         Exit Sub
  192.     End If
  193.  
  194.     If GetKeyState(vbKeyLeft) < 0 Then
  195.         If WalkMode = True Then
  196.             If LegalPos(UserPos.X - 1, UserPos.Y) Then
  197.                 MoveCharbyHead UserCharIndex, WEST
  198.                 MoveScreen WEST
  199.             End If
  200.         Else
  201.             MoveScreen WEST
  202.         End If
  203.         Exit Sub
  204.     End If
  205.  
  206. End If
  207.  
  208. End Sub
  209. Sub ReacttoMouseClick(Button As Integer, tX As Integer, tY As Integer)
  210. '*****************************************************************
  211. 'React to mouse button
  212. '*****************************************************************
  213. Dim LoopC As Integer
  214. Dim NPCIndex As Integer
  215. Dim OBJIndex As Integer
  216. Dim Head As Integer
  217. Dim Body As Integer
  218. Dim Heading As Byte
  219.  
  220. 'Right
  221. If Button = vbRightButton Then
  222.     
  223.     'Show Info
  224.     
  225.     'Position
  226.     frmMain.StatTxt.Text = frmMain.StatTxt.Text & ENDL & "Position " & tX & "," & tY & "  Blocked=" & MapData(tX, tY).Blocked
  227.     
  228.     'Exits
  229.     If MapData(tX, tY).TileExit.Map > 0 Then
  230.         frmMain.StatTxt.Text = frmMain.StatTxt.Text & ENDL & "Tile Exit: " & MapData(tX, tY).TileExit.Map & "," & MapData(tX, tY).TileExit.X & "," & MapData(tX, tY).TileExit.Y
  231.     End If
  232.     
  233.     'NPCs
  234.     If MapData(tX, tY).NPCIndex > 0 Then
  235.         frmMain.StatTxt.Text = frmMain.StatTxt.Text & ENDL & "NPC: " & GetVar(IniPath & "NPC.dat", "NPC" & MapData(tX, tY).NPCIndex, "Name")
  236.     End If
  237.     
  238.     'OBJs
  239.     If MapData(tX, tY).OBJInfo.OBJIndex > 0 Then
  240.         frmMain.StatTxt.Text = frmMain.StatTxt.Text & ENDL & "OBJ: " & GetVar(IniPath & "OBJ.dat", "OBJ" & MapData(tX, tY).OBJInfo.OBJIndex, "Name") & "   Amount=" & MapData(tX, tY).OBJInfo.Amount
  241.     End If
  242.     
  243.     'Append
  244.     frmMain.StatTxt.Text = frmMain.StatTxt.Text & ENDL
  245.     frmMain.StatTxt.SelStart = Len(frmMain.StatTxt.Text)
  246.     
  247.     Exit Sub
  248. End If
  249.  
  250.  
  251. 'Left click
  252. If Button = vbLeftButton Then
  253.  
  254.     '************** Place grh
  255.     If frmMain.PlaceGrhCmd.Enabled = False Then
  256.  
  257.         'Erase 2-4
  258.         If frmMain.EraseAllchk.value = 1 Then
  259.             For LoopC = 2 To 4
  260.                 MapData(tX, tY).Graphic(LoopC).GrhIndex = 0
  261.             Next LoopC
  262.             Exit Sub
  263.         End If
  264.  
  265.         'Erase layer
  266.         If frmMain.Erasechk.value = 1 Then
  267.         
  268.             If Val(frmMain.Layertxt.Text) = 1 Then
  269.                 MsgBox "Can't Erase Layer 1"
  270.                 Exit Sub
  271.             End If
  272.             
  273.             MapData(tX, tY).Graphic(Val(frmMain.Layertxt.Text)).GrhIndex = 0
  274.             Exit Sub
  275.         End If
  276.  
  277.         'Else Place graphic
  278.         MapData(tX, tY).Blocked = frmMain.Blockedchk.value
  279.         MapData(tX, tY).Graphic(Val(frmMain.Layertxt.Text)).GrhIndex = Val(frmMain.Grhtxt.Text)
  280.         
  281.         'Setup GRH
  282.  
  283.         InitGrh MapData(tX, tY).Graphic(Val(frmMain.Layertxt.Text)), Val(frmMain.Grhtxt.Text)
  284.  
  285.     End If
  286.     
  287.     '************** Place blocked tile
  288.     If frmMain.PlaceBlockCmd.Enabled = False Then
  289.         MapData(tX, tY).Blocked = frmMain.Blockedchk.value
  290.     End If
  291.  
  292.     '************** Place exit
  293.     If frmMain.PlaceExitCmd.Enabled = False Then
  294.         If frmMain.EraseExitChk.value = 0 Then
  295.             MapData(tX, tY).TileExit.Map = Val(frmMain.MapExitTxt.Text)
  296.             MapData(tX, tY).TileExit.X = Val(frmMain.XExitTxt.Text)
  297.             MapData(tX, tY).TileExit.Y = Val(frmMain.YExitTxt.Text)
  298.         Else
  299.             MapData(tX, tY).TileExit.Map = 0
  300.             MapData(tX, tY).TileExit.X = 0
  301.             MapData(tX, tY).TileExit.Y = 0
  302.         End If
  303.     End If
  304.  
  305.     '************** Place NPC
  306.     If frmMain.PlaceNPCCmd.Enabled = False Then
  307.         If frmMain.EraseNPCChk.value = 0 Then
  308.             If frmMain.NPCLst.ListIndex >= 0 Then
  309.                 NPCIndex = frmMain.NPCLst.ListIndex + 1
  310.                 Body = Val(GetVar(IniPath & "NPC.dat", "NPC" & NPCIndex, "Body"))
  311.                 Head = Val(GetVar(IniPath & "NPC.dat", "NPC" & NPCIndex, "Head"))
  312.                 Heading = Val(GetVar(IniPath & "NPC.dat", "NPC" & NPCIndex, "Heading"))
  313.                 Call MakeChar(NextOpenChar(), Body, Head, Heading, tX, tY)
  314.                 MapData(tX, tY).NPCIndex = NPCIndex
  315.             End If
  316.         Else
  317.             If MapData(tX, tY).NPCIndex > 0 Then
  318.                 MapData(tX, tY).NPCIndex = 0
  319.                 Call EraseChar(MapData(tX, tY).CharIndex)
  320.             End If
  321.         End If
  322.     End If
  323.     
  324.     '************** Place OBJ
  325.     If frmMain.PlaceObjCmd.Enabled = False Then
  326.         If frmMain.EraseObjChk.value = 0 Then
  327.             If frmMain.ObjLst.ListIndex >= 0 Then
  328.                 OBJIndex = frmMain.ObjLst.ListIndex + 1
  329.                 InitGrh MapData(tX, tY).ObjGrh, Val(GetVar(IniPath & "OBJ.dat", "OBJ" & OBJIndex, "GrhIndex"))
  330.                 MapData(tX, tY).OBJInfo.OBJIndex = OBJIndex
  331.                 MapData(tX, tY).OBJInfo.Amount = Val(frmMain.OBJAmountTxt)
  332.             End If
  333.         Else
  334.             MapData(tX, tY).OBJInfo.OBJIndex = 0
  335.             MapData(tX, tY).OBJInfo.Amount = 0
  336.             MapData(tX, tY).ObjGrh.GrhIndex = 0
  337.         End If
  338.     End If
  339.     
  340.     
  341.     'Set changed flag
  342.     MapInfo.Changed = 1
  343. End If
  344.  
  345. End Sub
  346.  
  347. Function FileExist(File As String, FileType As VbFileAttribute) As Boolean
  348. '*****************************************************************
  349. 'Checks to see if a file exists
  350. '*****************************************************************
  351.  
  352. If Dir(File, FileType) = "" Then
  353.     FileExist = False
  354. Else
  355.     FileExist = True
  356. End If
  357.  
  358. End Function
  359.  
  360. Public Function ReadField(Pos As Integer, Text As String, SepASCII As Integer) As String
  361. '*****************************************************************
  362. 'Gets a field from a string
  363. '*****************************************************************
  364. Dim i As Integer
  365. Dim LastPos As Integer
  366. Dim CurChar As String * 1
  367. Dim FieldNum As Integer
  368. Dim Seperator As String
  369.  
  370. Seperator = Chr(SepASCII)
  371. LastPos = 0
  372. FieldNum = 0
  373.  
  374. For i = 1 To Len(Text)
  375.     CurChar = Mid(Text, i, 1)
  376.     If CurChar = Seperator Then
  377.         FieldNum = FieldNum + 1
  378.         If FieldNum = Pos Then
  379.             ReadField**** Place OBJ    If F + 1
  380.         If FieldNum = Pos Then
  381.             ReadField*e